class Solution {  //暴力枚举O(n)->找到第一个大于后面值的数
public:
    int peakIndexInMountainArray(vector<int>& arr) {
    int i = 1;  
    for(; i < arr.size() - 2; i++)
    {
        if(arr[i] > arr[i + 1]) break;
    }
    return i;
    }
};

class Solution {  //二分查找O(longn)
public:  /*二段性——》利于规律，峰值左边部分，每个数都大于其前面的数、
    峰值右边部分，每个数都小于其前面的数 ——》arr[mid] > arr[mid - 1]、arr[mid] < arr[mid - 1]*/
    int peakIndexInMountainArray(vector<int>& arr) {
    int left = 1, right = arr.size() - 1; //细节点：第一个数和最后一个数一定不是峰值
    while(left < right)  //循环条件
    {
        int mid = left + (right - left + 1) / 2; //中点的选择(后面无-1，中点无需+1)
        if(arr[mid] < arr[mid - 1]) right = mid - 1; //右边(降序)
        else left = mid; //左边(升序)
    }
    return left;
    }
};